/* eslint-disable no-console */
(function ($) {
    // ================================ 字体 ================================
    let isFirstCheck = true;

    /**
     * Font Awesome 字体检测与修复
     * 功能：
     * 1. 自动识别并修复错误的图标类名组合
     * 2. 强制应用正确的字体家族
     * 3. 控制台输出错误警告
     * 4. 支持 FA5 和 FA6 语法
     */
    function ensureFaFont() {
        // 检测 Brands 图标（FA5: fab | FA6: fa-brands）
        $('[class*="fa-"]').each(function () {
            const $icon = $(this);
            const classes = $icon.attr('class') || '';

            // 错误组合检测（如 fas fa-brands）
            if ((classes.includes('fas') && classes.includes('fa-brands')) ||
                (classes.includes('fas') && classes.includes('fab'))) {
                console.warn('错误类名组合:', classes, '位于:', $icon[0]);
            }

            // Brands 图标处理（优先检测FA6语法）
            if (classes.includes('fa-brands') || classes.includes('fab')) {
                $icon.css('font-family', '"Font Awesome 6 Brands", "Font Awesome 5 Brands"');
                // 自动补全FA5类名（兼容旧版）
                if (!classes.includes('fab') && classes.includes('fa-brands')) {
                    $icon.addClass('fab');
                }
                return;
            }

            // Free 图标处理
            const isSolid = classes.includes('fas') || classes.includes('fa-solid');
            const isRegular = classes.includes('far') || classes.includes('fa-regular');

            if (isSolid || isRegular) {
                $icon.css({
                    'font-family': '"Font Awesome 6 Free", "Font Awesome 5 Free"',
                    'font-weight': isSolid ? '900' : '400'
                });
                // 兼容旧版类名
                if (isSolid && !classes.includes('fas')) $icon.addClass('fas');
                if (isRegular && !classes.includes('far')) $icon.addClass('far');
            }
        });

        // 字体加载状态检测
        const checkFont = (fontName) => {
            return document.fonts ? document.fonts.check(`12px "${fontName}"`) : true;
        };

        if (isFirstCheck) {
            isFirstCheck = false;
            return;
        }
        // 输出诊断信息
        console.groupCollapsed('[selfCheck] Font Awesome 诊断');
        console.log('Brands 字体状态:',
            checkFont('Font Awesome 6 Brands') ? '已加载' : '未加载',
            checkFont('Font Awesome 5 Brands') ? '(FA5 备用存在)' : '(FA5 备用缺失)'
        );
        console.log('Free 字体状态:',
            checkFont('Font Awesome 6 Free') ? '已加载' : '未加载',
            checkFont('Font Awesome 5 Free') ? '(FA5 备用存在)' : '(FA5 备用缺失)'
        );
        console.groupEnd();
    }

    // 页面加载完成后执行 + 字体加载后重新检查
    ensureFaFont();
    if (document.fonts) {
        document.fonts.ready.then(ensureFaFont);
    }

    // ================================ 一言 ================================
    /**
     * 获取并展示一言数据
     */
    let isFetching = false; // 防止重复请求
    function fetchHitokoto() {
        if (isFetching) return;
        isFetching = true;

        const $hitokoto = $('#hitokoto_text');
        $.ajax({
            url: 'https://international.v1.hitokoto.cn/?c=b', // 国际版域名
            dataType: 'json',
            timeout: 5000, // 添加超时控制
            success (data) {
                const fromWho = data.from_who && data.from_who.trim() ? `${data.from_who  }：` : '';
                $hitokoto
                    .attr('href', `https://hitokoto.cn/?uuid=${data.uuid}`)
                    .text(`${fromWho}${data.hitokoto}`)
            },
            error (xhr, status, error) {
                console.error('[module] 一言加载失败:', status, error);
                $hitokoto.text('你似乎一直在寻找我。').addClass('text-muted');
            },
            complete () {
                isFetching = false;
            }
        });
    }

    function initHitokoto() {
        if ($('#hitokoto').length !== 0) {
            // 初始化加载（立即显示）,使用 requestIdleCallback 初始化（非阻塞）
            requestIdleCallback(fetchHitokoto);
            // 改用 setTimeout 链避免内存泄漏
            const refresh = () => {
                fetchHitokoto();
                // 每5分钟刷新（300,000毫秒）
                setTimeout(refresh, 300000);
            };
            refresh();
        }
    }

    initHitokoto();

    // ================================ 模态框 ================================
    /**
     * 移除用户设置弹窗的背景遮罩
     */
    $('#settings-modal').modal({
        backdrop: false, // true：显示遮罩层，点击遮罩可关闭模态框 | false：不显示遮罩层 | 'static'：显示遮罩层，但点击遮罩不会关闭模态框
        show: false, // 👈 true 立即显示模态框 | false：不自动显示，需手动调用 .modal('show')
    });

    /**
     * 模态框层级控制，确保新打开模态框在其他内容之上
     */
    $(document).on('show.bs.modal', '.modal', function () {
        const zIndex = 1090 + (10 * $('.modal:visible').length);
        $(this).css('z-index', zIndex);
        setTimeout(() => {
            $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
        }, 0);
        if ($(this).attr('id') === 'settings-modal') {
            $('.nav-link.user-settings').tab('show');       // 激活"设置"Tab
            window.setModalAccessibilityState(false);       // 激活模态框
        }
    });

    /**
     * 模态框关闭时去掉层级控制
     */
    $(document).on('hide.bs.modal', '.modal', function () {
        $(this).css('z-index', '');
    });

    // ================================ 页面 ================================
    /**
     * 滚动页面内容时高亮对应菜单项 - 被动滚动监听（passive + 节流）
     */
    $(window).on('scroll', {passive: true}, window.AppUtils.throttle(function () {
        const scrollTop = $(this).scrollTop();
        let currentSectionId = '';
        let currentSectionMenu = '';

        const sectionData = $('.content-section i').map(function () {
            const $el = $(this);
            // 检查元素可见性和有效性
            if (!$el.length || !$el.is(':visible')) return null;
            // 安全获取offset
            const offset = $el.offset() || {top: 0};

            // 获取最近的.content-section父元素及其索引
            const $parentSection = $el.closest('.content-section');
            const menu = $parentSection.data('menu');
            return {
                id: $(this).attr('id'),
                top: offset.top - 150,
                menu,
            };
        }).get();

        // 检测当前可视区域的内容区块
        sectionData.forEach(section => {
            if (scrollTop >= section.top) {
                currentSectionId = section.id;
                currentSectionMenu = section.menu;
            }
        });

        // 高亮对应菜单项
        const sideBarSub = $('.sidebar-item.has-sub li')
        const sideBarSubActive = sideBarSub.is(':visible')

        if (sideBarSubActive) {
            sideBarSub.not(`a[href="#${currentSectionId}"]`).hide()
        }

        const $menuTitleMd5 = $(`.sidebar-menu-inner a[href="#${currentSectionId}"]`)
        $('.sidebar-menu-inner a').removeClass('active');
        $menuTitleMd5.addClass('active');

        // 自动展开二级目录
        $('.sidebar-menu-inner .sidebar-item').removeClass('sidebar-show');
        $menuTitleMd5.parents('.sidebar-item').filter(function () {
            return $(this).find('span:first').text().trim() === currentSectionMenu;
        }).addClass('sidebar-show').find('ul').find('*').css('display', '');
    }, 300));

    $('a.smooth').on('click', window.AppUtils.handleScroll);
})(window.jQuery);